package com.brush.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.brush.common.core.domain.entity.SysMenu;
import com.brush.system.domain.req.sysmenu.SysMenuAddReq;
import com.brush.system.domain.req.sysmenu.SysMenuEditReq;
import com.brush.system.domain.req.sysmenu.SysMenuReq;
import com.brush.system.domain.resp.sysmenu.SysMenuResp;
import com.brush.system.domain.vo.RouterVo;

import java.util.Collection;
import java.util.List;
import java.util.Set;

/**
 * @author Administrator
 * @description 针对表【sys_menu(菜单权限表)】的数据库操作Service
 * @createDate 2024-08-19 10:07:22
 */
public interface SysMenuService extends IService<SysMenu> {

    /**
     * 根据角色id集合查询权限集合
     *
     * @param roleIdSet
     * @return
     */
    Set<String> findPermissionsByRoleIds(Set<Long> roleIdSet);

    /**
     * 查询用户拥有的菜单集合
     *
     * @param userId
     * @return
     */
    List<SysMenu> selectMenuTreeByUserId(Long userId);

    /**
     * 构建前端路由所需要的菜单
     * {
     * path: '',
     * component: Layout,
     * redirect: 'index',
     * // 二级路由
     * children: [
     * {
     * path: 'index',
     * component: () => import('@/views/index'),
     * name: 'Index',
     * meta: { title: '首页', icon: 'dashboard', affix: true }
     * }
     * ]
     * }
     *
     * @param menus
     * @return
     */
    List<RouterVo> buildMenus(List<SysMenu> menus);

    /**
     * 查询菜单集合
     *
     * @param req
     * @return
     */
    List<SysMenuResp> search(SysMenuReq req);

    boolean add(SysMenuAddReq req);

    boolean edit(SysMenuEditReq req);

    SysMenuResp findById(Long menuId);

    /**
     * 根据角色ID查询权限
     *
     * @param roleId 角色ID
     * @return 权限列表
     */
     Set<String> selectMenuPermsByRoleId(Long roleId);

    /**
     * 根据用户ID查询权限
     * @param userId
     * @return
     */
    Set<String> selectMenuPermsByUserId(Long userId);
}
